/*
 * Prenotazione.java
 * Entity Bean utilizzato per rappresentare e memorizzare le prenotazioni.
 */

package ejb;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 * L'entity bean Prenotazione prende come costruttore
 * la chiave di un oggetto formata da PrenotazionePK(codEvento, mailUtente).
 * Implementa gli attributi, numero posti prenotati, importo totale, codiceViaggio, e data prenotazione
 * Alla prenotazione di un evento verrà passato come parametro per l'inserimento
 * della tupla in tabella un ogetto PrenotazionePK, tale oggetto permetterà
 * l'istanziazione della tupla, appena creata, in tabella.
 * Implementa inotre tutti metodi set e get per la gestione dell'entità prenotazione
 * @author Rosario Salone
 */

@Entity
@Table(name = "PRENOTAZIONE")
@NamedQueries({@NamedQuery(name = "Prenotazione.findByCodEvento", query = "SELECT p FROM Prenotazione p WHERE p.prenotazionePK.codEvento = :codEvento"), @NamedQuery(name = "Prenotazione.findByEmail", query = "SELECT p FROM Prenotazione p WHERE p.prenotazionePK.email = :email"), @NamedQuery(name = "Prenotazione.findByNumPostiPrenotati", query = "SELECT p FROM Prenotazione p WHERE p.numPostiPrenotati = :numPostiPrenotati"), @NamedQuery(name = "Prenotazione.findByImportoTotale", query = "SELECT p FROM Prenotazione p WHERE p.importoTotale = :importoTotale"), @NamedQuery(name = "Prenotazione.findByCodiceViaggio", query = "SELECT p FROM Prenotazione p WHERE p.codiceViaggio = :codiceViaggio"), @NamedQuery(name = "Prenotazione.findByDataPrenotazione", query = "SELECT p FROM Prenotazione p WHERE p.dataPrenotazione = :dataPrenotazione")})
public class Prenotazione implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected PrenotazionePK prenotazionePK;
    @Column(name = "NUM_POSTI_PRENOTATI", nullable = false)
    private int numPostiPrenotati;
    @Column(name = "IMPORTO_TOTALE", nullable = false)
    private int importoTotale;
    @Column(name = "CODICE_VIAGGIO")
    private Integer codiceViaggio;
    @Column(name = "DATA_PRENOTAZIONE", nullable = false)
    private String dataPrenotazione;

    public Prenotazione() {
    }

    public Prenotazione(PrenotazionePK prenotazionePK) {
        this.prenotazionePK = prenotazionePK;
    }

    public Prenotazione(PrenotazionePK prenotazionePK, int numPostiPrenotati, int importoTotale, String dataPrenotazione) {
        this.prenotazionePK = prenotazionePK;
        this.numPostiPrenotati = numPostiPrenotati;
        this.importoTotale = importoTotale;
        this.dataPrenotazione = dataPrenotazione;
        this.codiceViaggio = 1;
    }

    public Prenotazione(int codEvento, String email) {
        this.prenotazionePK = new PrenotazionePK(codEvento, email);
    }

    public PrenotazionePK getPrenotazionePK() {
        return prenotazionePK;
    }

    public void setPrenotazionePK(PrenotazionePK prenotazionePK) {
        this.prenotazionePK = prenotazionePK;
    }

    public int getNumPostiPrenotati() {
        return numPostiPrenotati;
    }

    public void setNumPostiPrenotati(int numPostiPrenotati) {
        this.numPostiPrenotati = numPostiPrenotati;
    }

    public int getImportoTotale() {
        return importoTotale;
    }

    public void setImportoTotale(int importoTotale) {
        this.importoTotale = importoTotale;
    }

    public Integer getCodiceViaggio() {
        return codiceViaggio;
    }

    public void setCodiceViaggio(Integer codiceViaggio) {
        this.codiceViaggio = codiceViaggio;
    }

    public String getDataPrenotazione() {
        return dataPrenotazione;
    }

    public void setDataPrenotazione(String dataPrenotazione) {
        this.dataPrenotazione = dataPrenotazione;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (prenotazionePK != null ? prenotazionePK.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Prenotazione)) {
            return false;
        }
        Prenotazione other = (Prenotazione) object;
        if ((this.prenotazionePK == null && other.prenotazionePK != null) || (this.prenotazionePK != null && !this.prenotazionePK.equals(other.prenotazionePK))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "ejb.Prenotazione[prenotazionePK=" + prenotazionePK + "]";
    }

}
